package com.zhengqing.design.create.singleton;

/**
 * <p> 双重检索模式 </p>
 *
 * @author zhengqingya
 * @description
 * @date 2022/12/21 17:03
 */
public class Singleton04 {

    /**
     * 私有实例 volatile
     */
    private volatile static Singleton04 instance;

    /**
     * 私有构造方法
     */
    private Singleton04() {
    }

    /**
     * 获取实例的方法
     */
    public static Singleton04 getUniqueInstance() {
        // 第一个 if 语句用来避免 uniqueInstance 已经被实例化之后的加锁操作
        if (instance == null) {
            // 加锁
            synchronized (Singleton04.class) {
                // 第二个 if 语句进行了加锁，所以只能有一个线程进入，就不会出现 instance == null 时两个线程同时进行实例化操作。
                if (instance == null) {
                    instance = new Singleton04();
                }
            }
        }
        return instance;
    }
}


